home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet News 1999 February
/
InternetNews_1999_02.iso
/
pc
/
Articoli
/
dynamicHtml
/
Esempi9807
/
Esempio 3
/
menus.js
< prev
next >
Wrap
Text File
|
1998-01-25
|
23KB
|
683 lines
/* The following statement must not be removed from this code:
This code is copyright 1997, 1998 insideDHTML.com, LLC. All rights rserved.
HTTP://www.insideDHTML.com
This code was modified from the original menu toolkit code by Pete Lyons with the
permission of Scott Isaacs.
*/
var childActive = null
var menuActive = null
var lastHighlight = null
var active = false
function getReal(el) {
// Find a table cell element in the parent chain */
temp = el
if (temp.tagName=="TD")
el = temp
while ((temp.tagName!="TABLE") && (temp.className!="root") && (temp.id!="menuBar")) {
temp = temp.offsetParent
if (temp.tagName=="TD")
el = temp
}
return el
}
function getReal2(el) {
// Find a table cell element in the parent chain */
temp = el
if (temp.tagName=="TD")
el = temp
while ((temp.tagName!="TABLE") && (temp.className!="root") && (temp.id!="menuBar2")) {
temp = temp.offsetParent
if (temp.tagName=="TD")
el = temp
}
return el
}
function getReal3(el) {
// Find a table cell element in the parent chain */
temp = el
if (temp.tagName=="TD")
el = temp
while ((temp.tagName!="TABLE") && (temp.className!="root") && (temp.id!="menuBar3")) {
temp = temp.offsetParent
if (temp.tagName=="TD")
el = temp
}
return el
}
function raiseMenu(el) {
el.style.borderLeft = "0px #EEEEEE solid"
el.style.borderTop = "0px #EEEEEE solid"
el.style.borderRight = "0px gray solid"
el.style.borderBottom = "0px gray solid"
}
function clearHighlight(el) {
if (el==null) return
el.style.borderRight = "0px lightgrey solid"
el.style.borderBottom = "0px lightgrey solid"
el.style.borderTop = "0px lightgrey solid"
el.style.borderLeft = "0px lightgrey solid"
}
function sinkMenu(el) {
el.style.borderRight = "0px #EEEEEE solid"
el.style.borderBottom = "0px #EEEEEE solid"
el.style.borderTop = "0px gray solid"
el.style.borderLeft = "0px gray solid"
}
function menuHandler(menuItem) {
// Write generic menu handlers here!
// Returning true collapses the menu. Returning false does not collapse the menu
return true
}
function processClick() {
var el = getReal(event.srcElement)
if ((el.offsetParent.offsetParent.id=="menuBar") && (active)) {
cleanupMenu(menuActive)
clearHighlight(menuActive)
active=false
lastHighlight=null
doHighlight(el)
}
else {
if ((el.className=="root") || (!menuHandler(el)))
doMenuDown(el)
else {
if (el._childItem==null)
el._childItem = getChildren(el)
if (el._childItem!=null) return;
if ((el.id!="break") && (el.className!="disabled") && (el.className!="disabledhighlight") && (el.className!="clear")) {
if (menuHandler(el)) {
cleanupMenu(menuActive)
clearHighlight(menuActive)
active=false
lastHighlight=null
}
}
}
}
}
function processClick2() {
var el = getReal2(event.srcElement)
if ((el.offsetParent.offsetParent.id=="menuBar2") && (active)) {
cleanupMenu(menuActive)
clearHighlight(menuActive)
active=false
lastHighlight=null
doHighlight(el)
}
else {
if ((el.className=="root") || (!menuHandler(el)))
doMenuDown(el)
else {
if (el._childItem==null)
el._childItem = getChildren(el)
if (el._childItem!=null) return;
if ((el.id!="break") && (el.className!="disabled") && (el.className!="disabledhighlight") && (el.className!="clear")) {
if (menuHandler(el)) {
cleanupMenu(menuActive)
clearHighlight(menuActive)
active=false
lastHighlight=null
}
}
}
}
}
function processClick3() {
var el = getReal3(event.srcElement)
if ((el.offsetParent.offsetParent.id=="menuBar3") && (active)) {
cleanupMenu(menuActive)
clearHighlight(menuActive)
active=false
lastHighlight=null
doHighlight(el)
}
else {
if ((el.className=="root") || (!menuHandler(el)))
doMenuDown(el)
else {
if (el._childItem==null)
el._childItem = getChildren(el)
if (el._childItem!=null) return;
if ((el.id!="break") && (el.className!="disabled") && (el.className!="disabledhighlight") && (el.className!="clear")) {
if (menuHandler(el)) {
cleanupMenu(menuActive)
clearHighlight(menuActive)
active=false
lastHighlight=null
}
}
}
}
}
function getChildren(el) {
var tList = el.children.tags("TABLE")
var i = 0
while ((i<tList.length) && (tList[i].tagName!="TABLE"))
i++
if (i==tList.length)
return null
else
return tList[i]
}
function doMenuDown(el) {
if (el._childItem==null)
el._childItem = getChildren(el)
if ((el._childItem!=null) && (el.className!="disabled") && (el.className!="disabledhighlight")) {
// Performance Optimization - Cache child element
ch = el._childItem
if (ch.style.display=="block") {
removeHighlight(ch.active)
return
}
ch.style.display = "block"
if (el.className=="root") {
ch.style.pixelTop = el.offsetParent.offsetTop
ch.style.pixelLeft = el.offsetParent.offsetWidth
sinkMenu(el)
active = true
menuActive = el
} else {
childActive = el
ch.style.pixelLeft = el.offsetParent.offsetWidth
ch.style.pixelTop = el.offsetParent.offsetTop
}
}
}
function doHighlight(el) {
el = getReal(el)
if ("root"==el.className) {
if ((menuActive!=null) && (menuActive!=el)) {
clearHighlight(menuActive)
}
if (!active) {
raiseMenu(el)
}
else {
sinkMenu(el)}
if ((active) && (menuActive!=el)) {
cleanupMenu(menuActive)
doMenuDown(el)
}
menuActive = el
lastHighlight=null
}
else {
if (childActive!=null)
if (!childActive.contains(el))
closeMenu(childActive, el)
if (("TD"==el.tagName) && ("clear"!=el.className)) {
var ch = el.offsetParent.offsetParent
if (ch.active!=null) {
if (ch.active!=el) {
if (ch.active.className=="disabledhighlight")
ch.active.className="disabled"
else
ch.active.className=""
}
}
ch.active = el
lastHighlight = el
if ((el.className=="disabled") || (el.className=="disabledhighlight") || (el.id=="break"))
el.className = "disabledhighlight"
else {
if (el.id!="break") {
el.className = "highlight"
if (el._childItem==null)
el._childItem = getChildren(el)
if (el._childItem!=null) {
doMenuDown(el)
}
}
}
}
}
}
function doHighlight2(el) {
el = getReal2(el)
if ("root"==el.className) {
if ((menuActive!=null) && (menuActive!=el)) {
clearHighlight(menuActive)
}
if (!active) {
raiseMenu(el)
}
else {
sinkMenu(el)}
if ((active) && (menuActive!=el)) {
cleanupMenu(menuActive)
doMenuDown(el)
}
menuActive = el
lastHighlight=null
}
else {
if (childActive!=null)
if (!childActive.contains(el))
closeMenu(childActive, el)
if (("TD"==el.tagName) && ("clear"!=el.className)) {
var ch = el.offsetParent.offsetParent
if (ch.active!=null) {
if (ch.active!=el) {
if (ch.active.className=="disabledhighlight")
ch.active.className="disabled"
else
ch.active.className=""
}
}
ch.active = el
lastHighlight = el
if ((el.className=="disabled") || (el.className=="disabledhighlight") || (el.id=="break"))
el.className = "disabledhighlight"
else {
if (el.id!="break") {
el.className = "highlight"
if (el._childItem==null)
el._childItem = getChildren(el)
if (el._childItem!=null) {
doMenuDown(el)
}
}
}
}
}
}
function doHighlight3(el) {
el = getReal3(el)
if ("root"==el.className) {
if ((menuActive!=null) && (menuActive!=el)) {
clearHighlight(menuActive)
}
if (!active) {
raiseMenu(el)
}
else {
sinkMenu(el)}
if ((active) && (menuActive!=el)) {
cleanupMenu(menuActive)
doMenuDown(el)
}
menuActive = el
lastHighlight=null
}
else {
if (childActive!=null)
if (!childActive.contains(el))
closeMenu(childActive, el)
if (("TD"==el.tagName) && ("clear"!=el.className)) {
var ch = el.offsetParent.offsetParent
if (ch.active!=null) {
if (ch.active!=el) {
if (ch.active.className=="disabledhighlight")
ch.active.className="disabled"
else
ch.active.className=""
}
}
ch.active = el
lastHighlight = el
if ((el.className=="disabled") || (el.className=="disabledhighlight") || (el.id=="break"))
el.className = "disabledhighlight"
else {
if (el.id!="break") {
el.className = "highlight"
if (el._childItem==null)
el._childItem = getChildren(el)
if (el._childItem!=null) {
doMenuDown(el)
}
}
}
}
}
}
function removeHighlight(el) {
if (el!=null)
if ((el.className=="disabled") || (el.className=="disabledhighlight"))
el.className="disabled"
else
el.className=""
}
function cleanupMenu(el) {
if (el==null) return
for (var i = 0; i < el.all.length; i++) {
var item = el.all[i]
if (item.tagName=="TABLE")
item.style.display = ""
removeHighlight(item.active)
item.active=null
}
}
function closeMenu(ch, el) {
var start = ch
while (ch.className!="root") {
ch = ch.parentElement
if (((!ch.contains(el)) && (ch.className!="root"))) {
start=ch
}
}
cleanupMenu(start)
}
function checkMenu() {
if (document.all.menuBar==null) {
clearHighlight(menuActive)
closeMenu(menuActive)
active = false
menuActive=null
choiceActive = null
}
if (document.all.menuBar2==null) {
clearHighlight(menuActive)
closeMenu(menuActive)
active = false
menuActive=null
choiceActive = null
}
if (document.all.menuBar3==null) {
clearHighlight(menuActive)
closeMenu(menuActive)
active = false
menuActive=null
choiceActive = null
}
}
function doCheckOut() {
var el = event.toElement
if ((!active) && (menuActive!=null) && (!menuActive.contains(el))) {
clearHighlight(menuActive)
menuActive=null
}
}
function doCheckOut2() {
var el = event.toElement
if ((!active) && (menuActive!=null) && (!menuActive.contains(el))) {
clearHighlight(menuActive)
menuActive=null
}
}
function doCheckOut3() {
var el = event.toElement
if ((!active) && (menuActive!=null) && (!menuActive.contains(el))) {
clearHighlight(menuActive)
menuActive=null
}
}
function processKey() {
if (active) {
switch (event.keyCode) {
case 13: lastHighlight.click(); break;
case 39: // right
if ((lastHighlight==null) || (lastHighlight._childItem==null)) {
var idx = menuActive.cellIndex
if (idx==menuActive.offsetParent.cells.length-2)
idx = 0
else
idx++
newItem = menuActive.offsetParent.cells[idx]
} else
{
newItem = lastHighlight._childItem.rows[0].cells[0]
}
doHighlight(newItem)
break;
case 37: //left
if ((lastHighlight==null) || (lastHighlight.offsetParent.offsetParent.offsetParent.id=="menuBar")) {
var idx = menuActive.cellIndex
if (idx==0)
idx = menuActive.offsetParent.cells.length-2
else
idx--
newItem = menuActive.offsetParent.cells[idx]
} else
{
newItem = lastHighlight.offsetParent
while (newItem.tagName!="TD")
newItem = newItem.parentElement
}
doHighlight(newItem)
break;
case 40: // down
if (lastHighlight==null) {
itemCell = menuActive._childItem
curCell=0
curRow = 0
}
else {
itemCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.cellIndex==lastHighlight.offsetParent.cells.length-1) {
curCell = 0
curRow = lastHighlight.offsetParent.rowIndex+1
if (lastHighlight.offsetParent.rowIndex==itemCell.rows.length-1)
curRow = 0
} else {
curCell = lastHighlight.cellIndex+1
curRow = lastHighlight.offsetParent.rowIndex
}
}
doHighlight(itemCell.rows[curRow].cells[curCell])
break;
case 38: // up
if (lastHighlight==null) {
itemCell = menuActive._childItem
curRow = itemCell.rows.length-1
curCell= itemCell.rows[curRow].cells.length-1
}
else {
itemCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.cellIndex==0) {
curRow = lastHighlight.offsetParent.rowIndex-1
if (curRow==-1)
curRow = itemCell.rows.length-1
curCell= itemCell.rows[curRow].cells.length-1
} else {
curCell = lastHighlight.cellIndex - 1
curRow = lastHighlight.offsetParent.rowIndex
}
}
doHighlight(itemCell.rows[curRow].cells[curCell])
break;
if (lastHighlight==null) {
curCell = menuActive._childItem
curRow = curCell.rows.length-1
}
else {
curCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.offsetParent.rowIndex==0)
curRow = curCell.rows.length-1
else
curRow = lastHighlight.offsetParent.rowIndex-1
}
doHighlight(curCell.rows[curRow].cells[0])
break;
}
}
}
function processKey2() {
if (active) {
switch (event.keyCode) {
case 13: lastHighlight.click(); break;
case 39: // right
if ((lastHighlight==null) || (lastHighlight._childItem==null)) {
var idx = menuActive.cellIndex
if (idx==menuActive.offsetParent.cells.length-2)
idx = 0
else
idx++
newItem = menuActive.offsetParent.cells[idx]
} else
{
newItem = lastHighlight._childItem.rows[0].cells[0]
}
doHighlight(newItem)
break;
case 37: //left
if ((lastHighlight==null) || (lastHighlight.offsetParent.offsetParent.offsetParent.id=="menuBar2")) {
var idx = menuActive.cellIndex
if (idx==0)
idx = menuActive.offsetParent.cells.length-2
else
idx--
newItem = menuActive.offsetParent.cells[idx]
} else
{
newItem = lastHighlight.offsetParent
while (newItem.tagName!="TD")
newItem = newItem.parentElement
}
doHighlight(newItem)
break;
case 40: // down
if (lastHighlight==null) {
itemCell = menuActive._childItem
curCell=0
curRow = 0
}
else {
itemCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.cellIndex==lastHighlight.offsetParent.cells.length-1) {
curCell = 0
curRow = lastHighlight.offsetParent.rowIndex+1
if (lastHighlight.offsetParent.rowIndex==itemCell.rows.length-1)
curRow = 0
} else {
curCell = lastHighlight.cellIndex+1
curRow = lastHighlight.offsetParent.rowIndex
}
}
doHighlight(itemCell.rows[curRow].cells[curCell])
break;
case 38: // up
if (lastHighlight==null) {
itemCell = menuActive._childItem
curRow = itemCell.rows.length-1
curCell= itemCell.rows[curRow].cells.length-1
}
else {
itemCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.cellIndex==0) {
curRow = lastHighlight.offsetParent.rowIndex-1
if (curRow==-1)
curRow = itemCell.rows.length-1
curCell= itemCell.rows[curRow].cells.length-1
} else {
curCell = lastHighlight.cellIndex - 1
curRow = lastHighlight.offsetParent.rowIndex
}
}
doHighlight(itemCell.rows[curRow].cells[curCell])
break;
if (lastHighlight==null) {
curCell = menuActive._childItem
curRow = curCell.rows.length-1
}
else {
curCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.offsetParent.rowIndex==0)
curRow = curCell.rows.length-1
else
curRow = lastHighlight.offsetParent.rowIndex-1
}
doHighlight(curCell.rows[curRow].cells[0])
break;
}
}
}
function processKey3() {
if (active) {
switch (event.keyCode) {
case 13: lastHighlight.click(); break;
case 39: // right
if ((lastHighlight==null) || (lastHighlight._childItem==null)) {
var idx = menuActive.cellIndex
if (idx==menuActive.offsetParent.cells.length-2)
idx = 0
else
idx++
newItem = menuActive.offsetParent.cells[idx]
} else
{
newItem = lastHighlight._childItem.rows[0].cells[0]
}
doHighlight(newItem)
break;
case 37: //left
if ((lastHighlight==null) || (lastHighlight.offsetParent.offsetParent.offsetParent.id=="menuBar3")) {
var idx = menuActive.cellIndex
if (idx==0)
idx = menuActive.offsetParent.cells.length-2
else
idx--
newItem = menuActive.offsetParent.cells[idx]
} else
{
newItem = lastHighlight.offsetParent
while (newItem.tagName!="TD")
newItem = newItem.parentElement
}
doHighlight(newItem)
break;
case 40: // down
if (lastHighlight==null) {
itemCell = menuActive._childItem
curCell=0
curRow = 0
}
else {
itemCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.cellIndex==lastHighlight.offsetParent.cells.length-1) {
curCell = 0
curRow = lastHighlight.offsetParent.rowIndex+1
if (lastHighlight.offsetParent.rowIndex==itemCell.rows.length-1)
curRow = 0
} else {
curCell = lastHighlight.cellIndex+1
curRow = lastHighlight.offsetParent.rowIndex
}
}
doHighlight(itemCell.rows[curRow].cells[curCell])
break;
case 38: // up
if (lastHighlight==null) {
itemCell = menuActive._childItem
curRow = itemCell.rows.length-1
curCell= itemCell.rows[curRow].cells.length-1
}
else {
itemCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.cellIndex==0) {
curRow = lastHighlight.offsetParent.rowIndex-1
if (curRow==-1)
curRow = itemCell.rows.length-1
curCell= itemCell.rows[curRow].cells.length-1
} else {
curCell = lastHighlight.cellIndex - 1
curRow = lastHighlight.offsetParent.rowIndex
}
}
doHighlight(itemCell.rows[curRow].cells[curCell])
break;
if (lastHighlight==null) {
curCell = menuActive._childItem
curRow = curCell.rows.length-1
}
else {
curCell = lastHighlight.offsetParent.offsetParent
if (lastHighlight.offsetParent.rowIndex==0)
curRow = curCell.rows.length-1
else
curRow = lastHighlight.offsetParent.rowIndex-1
}
doHighlight(curCell.rows[curRow].cells[0])
break;
}
}
}